فرض کن یه دستگاه خودپرداز داری که از کاربر میخواد رمز و مبلغ رو وارد کنه. توی لینوکس، دستور read دقیقاً همینه: به اسکریپت شما اجازه میده از کاربر ورودی بگیره و توی متغیرها ذخیره کنه. این جلسه بهت یاد میده چطور با read اسکریپتهای تعاملی (Interactive) بنویسی!
read چیست؟
read یک دستور داخلی در Bash است که ورودی کاربر را از صفحهکلید (یا یک فایل) میخواند و در یک یا چند متغیر ذخیره میکند. این دستور اساس ساخت اسکریپتهای تعاملی است.
read اجرای اسکریپت را متوقف میکند و منتظر میماند تا کاربر متنی را وارد کند و Enter را بزند. سپس متن وارد شده را در متغیر(های) مشخصشده ذخیره میکند.
توضیح: اسکریپت یک پیام چاپ میکند، سپس با read name منتظر میماند تا کاربر نامش را تایپ کند. بعد از فشردن Enter، مقدار در متغیر name ذخیره شده و در خط بعد چاپ میشود.
read هیچ متغیری ندهید، ورودی در متغیر پیشفرض REPLY ذخیره میشود.
read| گزینه | کاربرد | مثال |
|---|---|---|
-p "prompt" |
نمایش پیام (پرامپت) قبل از دریافت ورودی | read -p "نام: " name |
-s |
ورودی را مخفی میکند (مناسب برای رمز عبور) | read -s -p "رمز: " pass |
-t seconds |
زمان انتظار (Timeout) به ثانیه | read -t 5 -p "نام: " name |
-n N |
پس از دریافت N کاراکتر، بدون نیاز به Enter ادامه بده | read -n 1 -p "ادامه؟ (y/n) " ans |
-a array |
ورودی را به صورت آرایه ذخیره میکند | read -a colors |
-d delimiter |
تعیین جداکنندهٔ پایان ورودی (به جای Enter) | read -d ':' name |
-p (نمایش پیام)
گزینهٔ -p به شما اجازه میدهد که پیام راهنما را در همان خط قبل از ورودی نمایش دهید و نیازی به echo جداگانه نباشد. این روش ظاهر حرفهایتر و کد کوتاهتر ایجاد میکند.
توضیح: -p پیام را نمایش میدهد، سپس ورودی را میگیرد و در age ذخیره میکند. سپس محاسبهٔ روزها انجام شده و چاپ میشود.
-t (زمان انتظار / Timeout)
گزینهٔ -t به شما امکان میدهد مدت زمان مشخصی (به ثانیه) برای دریافت ورودی تعیین کنید. اگر کاربر در آن مدت چیزی وارد نکند، read با کد خروجی غیرصفر پایان مییابد و اسکریپت میتواند ادامه دهد. این قابلیت برای مدیریت زمان در برنامههای تعاملی بسیار مفید است.
توضیح: اگر کاربر ظرف ۵ ثانیه نام خود را وارد کند، پیام خوشآمدگویی چاپ میشود. در غیر این صورت پیام «زمان تمام شد» نمایش داده میشود.
read -t در صورت timeout، کد خروجی غیرصفر برمیگرداند که با if قابل بررسی است.
-s (ورودی مخفی)
گزینهٔ -s (Silent) باعث میشود که آنچه کاربر تایپ میکند در ترمینال نمایش داده نشود. این ویژگی برای دریافت رمز عبور یا اطلاعات حساس کاربرد دارد.
توضیح: با -s تایپ کاربر در صفحه نمایش داده نمیشود. بعد از read معمولاً یک echo خالی میگذاریم تا خط جدیدی ایجاد شود و پیام بعدی در خط بعدی چاپ شود.
-s فقط ورودی را مخفی میکند، اما خود متغیر مقدار را در خود نگه میدارد. برای امنیت بیشتر، بهتر است رمز را پس از استفاده پاک کنید.
میتوانید چند گزینه را با هم ترکیب کنید، مثلاً -s و -t و -p با هم:
read
میتوانید با یک read چندین متغیر را پر کنید. ورودی را با فاصله یا تب جدا کنید.
توضیح: اولین کلمه (Ali) در $first و دومین کلمه (Rezaei) در $last ذخیره میشود. اگر تعداد کلمات بیشتر از متغیرها باشد، بقیه در آخرین متغیر ریخته میشود.
read از تعداد کلمات ورودی بیشتر باشد، متغیرهای اضافی خالی میمانند.
read → دستور اصلی برای دریافت ورودی از کاربر.-p → نمایش پیام قبل از ورودی (جایگزین echo).-s → مخفی کردن ورودی (برای رمزها و اطلاعات حساس).-t → تعیین زمان انتظار (Timeout) بر حسب ثانیه.-n → تعداد کاراکترهای مورد نیاز برای پایان ورودی (بدون Enter).read میتوانید چندین متغیر را با فاصله پر کنید.-s -t).یک اسکریپت بنویسید که:
read -p نام و سن را بگیرد.-s استفاده کنید و یک timeout ۵ ثانیهای نیز تنظیم کنید.